#如果一件事务操作非常多，代码将非常复杂
#进行动作拆分（封装到函数中），能够让代码更容易读懂

def randomString(n):
    import string             # 调用string库
    import random             # 调用随机数
    # string.ascii_letters：a至z 26位英文字母小写的数组和 A至Z 26位英文字母大写的数组
    # string.digits：0至9共10位的数字串
    s="".join(random.sample(string.ascii_letters + string.digits + "!@#$%^&*()", n))
    # ""：内容为空的字符串，join：将后绪（）中的数组调用进前面的""空字符串中；n代表取多少位数
    return s
def readFile(url):
    f = open( url,"r")
    s = f.read()
    f.close()
    return s
def openBrowser(url):
    from selenium import webdriver
    dr = webdriver.Firefox()
    dr.implicitly_wait(10)
    dr.get(url)
    return dr
def logIn(dr,userName,password):
    dr.find_element_by_link_text("登录").click()
    dr.find_element_by_id("user_name").send_keys(userName)
    dr.find_element_by_id("user_password").send_keys(password)
    dr.find_element_by_xpath('//button').click()
def changePassword(dr,password,newPassword):
    dr.find_element_by_link_text("用户中心").click()
    dr.find_element_by_link_text("账户信息").click()
    dr.find_element_by_link_text("密码修改").click()
    dr.find_element_by_id("old_user_password").send_keys(password)
    dr.find_element_by_id("user_password").send_keys(newPassword)
    dr.find_element_by_id("user_password_con").send_keys(newPassword)
    dr.find_element_by_xpath('//button[text()="保存修改"]').click()
def writeFile(url,String):
    f=open(url,"w")
    f.write(String)
    f.close()

userName="huxian"
password = readFile("pwd.txt")                  #从文件中读取密码
newPassword = randomString(6)                    #random：随机数，string：生成一个6位随机密码
dr=openBrowser("http://localhost/dbshop/")   #打开网站
logIn(dr, userName, password)                    #登录函数（dr是变量，userName是用户名，password是密码）
changePassword(dr,password,newPassword)         #修改密码（dr：变量，password：密码，newPassword：新密码）
#断言
expect="会员密码修改成功"          #函数expect是一个预期变量
actual=dr.find_element_by_xpath('//div[@class="alert alert-success"]').text  #actual为实际结果取值；
actual=actual[0:8:1]            #当实际结果过长时，[0:8:1]表示取实际结果中 第1位至第9位的字符
if expect==actual:        #若预期结果和实际结果一致
    print("密码修改成功！")              #输出：“密码修改成功！”
    writeFile("pwd.txt",newPassword)              #把新密码写到文件pwd.txt中
else:
    print("密码修改失败！")             #输出：“密码修改失败”！
    print("预期结果：%s，实际结果：%s。"%(expect,actual))        #输出：“预期结果和实际结果”
dr.quit()                #关闭浏览器

